package com.yuw.io.streamAndReader;

import sun.font.TrueTypeFont;

import java.io.*;

public class TestDriverReader {
    public static void main(String[] args) {
        System.out.println("---------------------------------------");
        test01();
        System.out.println("---------------------------------------");
        test02();

    }

    /**
     * 字符流的使用
     */
    public static void test02() {
        // 创建字符流的对象
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            // 输入流对象
            br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/temp/filesdemo/temp100.txt")));
            // 输出流对象
            bw = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream("D:/temp/filesdemo/temp100(3).txt", true), "UTF-8"));

            // 读取文件内容
            // 默认值为null
            String str = null;
            do {

                str = br.readLine();
                // 将读取的字符串内容输出
                System.out.println(str);
                // 使用文件输出流对象将读取的输入流文件信息进行输出
                if (str != null) { // 读取到了内容，才往外写
                    bw.write(str);
                    bw.newLine(); // 输出换行符
                }
            } while (str != null);

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("字符流文件操作出现问题");
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
                if(bw != null){
                    bw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }


    /**
     * 字符流的使用
     */
    public static void test01() {
        // 创建字符流的对象
        try (
                // 好处：不需要在finally中进行资源关闭了，try-catch语句块执行完毕之后，会自动进行关闭；
                // 要求：这样使用的必须实现了 Closeable 接口，否则，无法这样使用
                // 输入流对象
                InputStreamReader isr = new InputStreamReader(new FileInputStream("D:/temp/filesdemo/temp100.txt"));
                // 输出流对象
                OutputStreamWriter osw = new OutputStreamWriter(
                        new FileOutputStream("D:/temp/filesdemo/temp100(2).txt", true), "UTF-8");
        ) {
            // 读取文件内容
            // 将读取的文件的内容存入byte数组中
            char[] chars;
            // 默认读取字符数为-1
            int len = -1;
            do {
                // 每次都是新的
                chars = new char[1024];
                len = isr.read(chars);
                // 将读取的byte数组转换为字符换内容
                String str = new String(chars);
                System.out.println(str);
                // 使用文件输出流对象将读取的输入流文件信息进行输出
                if (len != -1) { // 读取到了内容，才往外写
                    osw.write(chars, 0, len);
                }

            } while (len != -1);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("字符流文件操作出现问题");
        }

    }
}
